/**
 * 
 */
package modelo.AlgoHero;
import Titiritero.titiritero.*;

/**
 * @author Hernan G Gonzalez
 *
 */
public abstract class ElementoReproducible implements ObjetoVivo, Posicionable {

	private TipoElementoReproducible tipo;
	private int posX;
	private int posY;
	private int sentidoX;
	private int sentidoY;
	protected Boolean fuePrecionado;

	public ElementoReproducible (TipoElementoReproducible tipo){
		
		this.tipo = tipo;
		this.posX = Constantes.POS_X_INICIAL_NOTA.getValor();
		this.posY = -Constantes.ALTO_NOTA_TOTAL.getValor();
		this.sentidoX = 0;
		this.sentidoY = Constantes.CANTIDAD_DE_PIXELES_POR_MOVIMIENTO.getValor(); 
		this.fuePrecionado = false;
		
	}

	public Boolean compareTo(ElementoReproducible e) {
		
		if ((e.tipo) == this.tipo) return true;
		
		return false;
	}

	public void vivir() {
		
		this.posX += this.sentidoX;
		this.posY += this.sentidoY;
		
	}


	public int getX() {

		return this.posX;
	}


	public int getY() {

		return this.posY;
	}
	
	public void incrementarX (){
		
		int posAux = 0;
		
		posAux = this.posX + Constantes.DISTANCIA_X_PROX_NOTA.getValor();
		
		if (posAux > Constantes.ANCHO_MANGO.getValor()+Constantes.POS_X_INICIAL_MANGO.getValor()) throw new RuntimeException();
		
		this.posX = this.posX + Constantes.DISTANCIA_X_PROX_NOTA.getValor();
		
	}
	

	public Boolean getPrecionado(){
		
		return this.fuePrecionado;
		
	}

	public void setEstadoPresion(boolean estado){
		
		this.fuePrecionado = estado;
		
	}
	
	public abstract Boolean debePrecionarse();
	
	
	public TipoElementoReproducible getTipo(){
		
		return this.tipo;
	}
	
}
